package org.rcgwt.client.ui.grid.renderer;

import org.rcgwt.client.ui.grid.internal.IntRangeList;
import org.rcgwt.client.ui.grid.internal.model.IGridModel;
import org.rcgwt.client.ui.grid.internal.model.IViewModel;
import org.rcgwt.client.ui.grid.theme.IGridTheme;

/**
 * 
 * @author Olivier Oeuillot (latest modification by $Author: $)
 * @version $Revision: $ $Date: $
 */
public interface IGridRenderContext {
    IGridModel getGridModel();

    IGridTheme getTheme();

    IViewRenderContext getViewRenderContext(IViewModel view);

    Object getRenderContextAttribute(String attributeName);

    void setRenderContextAttribute(String attributeName, Object value);

    IntRangeList listAllVisibleRowModelIndexes();

    int[] getColumnModelIndexes();

    int[] getColumnRenderedIndexes();

    void setRenderedRowIndex(int startRowRenderedIndex, int rowCount);

    /*
    
    // void fillRowState(IRow row, Element element);

    Iterator<IColumn> getBodyColumnsIterator();

    ICellModel setupSharedCellModel(IRowModel row, IColumnModel columnModel);

    ICellModel searchCell(Element element, IRowModel row);

    int getColumCount();

    void changeRowStateBitMask(IRowModel row, int stateMask, boolean enableMask);

    IntSet listDrawnRowModelIndexes();

    IUpdateState startUpdate();

    public interface IUpdateState {
        void setGroupUpdated(IGroupModel group);

        boolean isGroupUpdated(IGroupModel group);

        IGridRenderContext getRenderContext();
    }

    // ---- Group API ---- //

    // Dans VIEW: Element getGroupElement(IGroup roup);

    // ---- Row API ---- //

    // Dans VIEW: Element getRowElement(IRow row);

    // ---- Paging indexes -----

    void setRenderedRowIndex(int start, int length);

    int getStartRenderedRowIndex();

    int getRenderedRowLength();

    // int getRowRenderIndex(IRow row);

    // int getAndUpdateRowRenderIndex(IRow row);

    IColumnRenderedIndexRecorder getCellRenderedIndexRecorder();

    IRowRenderedIndexRecorder getRowRenderedIndexRecorder();

    IGroupRenderedIndexRecorder getGroupRenderedIndexRecorder();
    
    */
}
